package models.common.entity;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.Transient;

import play.db.jpa.Model;

import common.constants.ConfConst;
import common.constants.Constants;
import common.utils.Security;

/**
 * 用户授信额度表
 * 
 * @description
 * 
 * @author fanghanyong
 * @createDate 2018年01月11日
 */

@Entity
public class t_user_credit extends Model {

	/**
	 * 构造器
	 */
	public t_user_credit() {

	}
	@Transient
	public String signId;
	public String getSignId () {
		
		return Security.addSign(this.id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
	/** 时间 */
	public Date time;

	/** 授信状态 0-初始授信可用 1-不可用 ，2，受让授信，可用；3待签收，不可用*/
	public int status;

	/** 申请人用户id */
	public long user_id;
	
	@Transient
	public String userSignId;
	public String getUserSignId () {
		
		return Security.addSign(this.user_id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}

	/** 持有人 */
	public String user_name;

	/** 授信总额度 */
	public double credit_limit_total;

	/** 授信编号 */
	public String credit_granting_code;

	/** 授信起始日期 */
	public Date start_time;

	/** 授信截止时间 */
	public Date end_time;

	/** 融通最高限额比例 */
	public double financing_confine_limit;
	
	/** 流转最高限额  单位（万元）*/
	public double flow_limit;
	
	/** 保证金比例 */
	public double bond_percent;
	
	/** 额度管理费率 */
	public double custodian_fee;

	/** 放款人id */
	public long lender_id;
	
	@Transient
	public String lenderSignId;
	public String getLenderSignId () {
		
		return Security.addSign(this.lender_id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}

	/** 放款人名称 */
	public String lender_name;

	/** 已用融通额度 */
	public double financing_used_limit;

	/** 已转让总额度 */
	public double transfer_used_limit;

	/** 已受让总额度 */
	public double transferee_used_limit;

	/** 已结清总额度 */
	public double cleared_limit;

	/** 逾期额度 */
	public double overdue_limit;

	/** 可用额度 */
	public double usable_limit;
	
	/** 可质押使用额度 */
	public double pledged_limit;

	/** 受让可用额度 (不适用)*/
	public double transferee_limit;
	
	/**父级id*/
	public long parent_id;
	
	@Transient
	public String queryId;
	public String getQueryId () {
		if(parent_id==0){
			return Security.addSign(this.id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
		}
		return Security.addSign(this.parent_id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
	
	@Transient
	public String usercreditId;
	public String getUsercreditId() {
		return Security.addSign(this.id, Constants.BID_ID_SIGN, ConfConst.ENCRYPTION_KEY_DES);
	}
	
	/** 备用 */
	public String reserve;
	
	/** 授信状态 0-初始授信可用 1-不可用 ，2，受让授信，可用；3待签收，不可用*/
	public AuditResult getStatus() {
		AuditResult auditResult = AuditResult.getEnum(this.status);
		return auditResult;
	}

	public void setStatus(AuditResult auditResult) {
		this.status = auditResult.code;
	}

	public enum AuditResult {

		/** 授信状态 */
		HAVE_NO_AUDIT(0, "初始授信"),

		/** 已过期*/
		AUDIT_FAILED(3, "已过期"),
		
		/**受让 */
		TRANSFER(2, "受让"),
		
		/**转出为商票的授信待签收 */
		WAIT_SIGN(1, "待签收");

		public int code;
		public String value;

		private AuditResult(int code, String value) {
			this.code = code;
			this.value = value;
		}

		/**
		 * 根据code取得会员类型,没有找到返回null
		 * 
		 * @description
		 * @return
		 */
		public static AuditResult getEnum(int code) {
			AuditResult[] memberTypes = AuditResult.values();
			for (AuditResult memberType : memberTypes) {
				if (memberType.code == code) {

					return memberType;
				}
			}

			return HAVE_NO_AUDIT;
		}
	}

}